<template>
  <el-tag :type="tagType" :size="size" :effect="effect">
    {{ statusText }}
  </el-tag>
</template>

<script setup lang="ts">
import {
  getPlanStatusText,
  getPlanStatusTagType,
  getAuditStatusText,
  getAuditStatusTagType,
  getRegistrationStatusText,
  getRegistrationStatusTagType,
  getScoreStatusText,
  getScoreStatusTagType,
  getHandleStatusText,
  getHandleStatusTagType,
  getMonitorStatusText,
  getMonitorStatusTagType,
  getTemplateStatusText,
  getTemplateStatusTagType,
  getCommonStatusText,
  getCommonStatusTagType
} from '@/utils/eval'

interface Props {
  /** 状态值 */
  status: number
  /** 状态类型 */
  type: 'plan' | 'audit' | 'registration' | 'score' | 'handle' | 'monitor' | 'template' | 'common'
  /** 标签大小 */
  size?: 'large' | 'default' | 'small'
  /** 标签效果 */
  effect?: 'dark' | 'light' | 'plain'
}

const props = withDefaults(defineProps<Props>(), {
  size: 'default',
  effect: 'light'
})

/** 状态文本 */
const statusText = computed(() => {
  switch (props.type) {
    case 'plan':
      return getPlanStatusText(props.status)
    case 'audit':
      return getAuditStatusText(props.status)
    case 'registration':
      return getRegistrationStatusText(props.status)
    case 'score':
      return getScoreStatusText(props.status)
    case 'handle':
      return getHandleStatusText(props.status)
    case 'monitor':
      return getMonitorStatusText(props.status)
    case 'template':
      return getTemplateStatusText(props.status)
    case 'common':
      return getCommonStatusText(props.status)
    default:
      return '未知'
  }
})

/** 标签类型 */
const tagType = computed(() => {
  switch (props.type) {
    case 'plan':
      return getPlanStatusTagType(props.status)
    case 'audit':
      return getAuditStatusTagType(props.status)
    case 'registration':
      return getRegistrationStatusTagType(props.status)
    case 'score':
      return getScoreStatusTagType(props.status)
    case 'handle':
      return getHandleStatusTagType(props.status)
    case 'monitor':
      return getMonitorStatusTagType(props.status)
    case 'template':
      return getTemplateStatusTagType(props.status)
    case 'common':
      return getCommonStatusTagType(props.status)
    default:
      return ''
  }
})
</script>
